#include <iostream>
#include <string>

// class Person
// {
// public:
//     int m_Age;
//     void showClassName()
//     {
//         std::cout << "this is a person class"<< std::endl;
//     }
//     void showPersonAge()
//     {
//         if (NULL == this)   return;
//         std::cout << "Your age "<<this->m_Age<<std::endl;
//     }
// };

// // assert NULL? fp=NULL 

// void test1()
// {
//     Person*p = NULL;
//     p->showClassName();
//     p->showPersonAge();
// }

class Person
{
    public:    
    mutable int mb;
    int ma;
    void showPerson() const
    {
        // this->ma = 100;
    }   
    // const 加在函数体前，函数参数列表后，用来修饰this指针使其成为常函数
    // 使用     mutable     关键字来让实例属性在常函数内部也可以修改
    void showPerson1() const
    {
        this->mb = 100;
    }
    void Potong()
    {
        std::cout << "Are you sure Kily?"<<std::endl;
    }
    Person()
    {

    }
    Person(int a,int b) 
    {
        mb = b;
        ma = a;
    }
};
void test1()
{
    Person p;
    p.showPerson();
}
// const Person const *this = p;?????????????So it cannot be changed?????

void test2()
{
    const Person p(100,200);
    p.mb = 100;
    std::cout << p.mb << "Against the constant pointer"<< std::endl;
    Person p1;
    p1.Potong();
    // 常对象只能调用常函数？？？？
}

int main()
{
    test1();
    return 0;
}  